package com.boot2.core.utils;


/**
 * @author zhangweilin
 * @Description: 字节码校验
 * @date 2019/12/7
 */
public class BytesValidator {
    public static String getBCC(byte[] data) {
        String ret = "";
        byte bcc[] = new byte[1];
        for (int i = 0; i < data.length; i++) {
            bcc[0] = (byte) (bcc[0] ^ data[i]);
        }
        String hex = Integer.toHexString(bcc[0] & 0xFF);
        if (hex.length() == 1) {
            hex = '0' + hex;
        }
        ret += hex.toUpperCase();
        return ret;
    }


//    public static String getBCC(String hex) {
//        int i = 0, j = 0;
//        int len = hex.length();
//        short inb[] = new short[len];
//        for (i = 0; i < len; i++) {
//            inb[i] = charToHex(hex.charAt(i));   //将String里的每一个char转换为Hex
//        }
//
//        for (i = 0; i < len; i++) {    //将每两个Hex合并成一个byte
//            inb[j] = (byte) (((inb[i] << 4) & 0x00f0) | ((inb[i + 1]) & 0x000f));
//            i++;
//            j++;
//        }
//        byte temp = 0x00; //校验值
//        for (i = 0; i < len / 2; i++) { //异或
//            temp ^= inb[i];
//        }
//        byte[] bytes = new byte[1];
//        bytes[0] = temp;
////        return ByteUtils.byteToStr(bytes, bytes.length);
//        return ByteUtils.
//    }
//
//    public static short charToHex(char x) { //将单个char转换为Hex
//        short result = 0;
//        switch (x) {
//            case 'a':
//                result = 10;
//                break;
//            case 'b':
//                result = 11;
//                break;
//            case 'c':
//                result = 12;
//                break;
//            case 'd':
//                result = 13;
//                break;
//            case 'e':
//                result = 14;
//                break;
//            case 'f':
//                result = 15;
//                break;
//            case 'A':
//                result = 10;
//                break;
//            case 'B':
//                result = 11;
//                break;
//            case 'C':
//                result = 12;
//                break;
//            case 'D':
//                result = 13;
//                break;
//            case 'E':
//                result = 14;
//                break;
//            case 'F':
//                result = 15;
//                break;
//            default:
//                result = (short) Character.getNumericValue(x);
//                break;
//        }
//        return result;
//    }
}
